Vuex 模块化

MuYan2021-01-07VueVue

Vuex 模块化例子

  • 创建 store
// store/index.js
import Vue from 'vue'
import Vuex from 'vuex'

import user from './module/user'

import getters from './getters'

Vue.use(Vuex)

const store = new Vuex.Store({
	state: {},
	mutations: {},
	modules:{
		user
	},
	getters
})

export default store
  • getters
// store/getters.js
const getters = {
  token: state => state.user.token
}
export default getters
// store/module/user.js
const Token = 'token'

export default {
	namespaced: true, // 设置为带命名空间的模块
	state: {
		token: sessionStorage.getItem(Token)
	},
	getters: {},
	mutations: {
		setToken(state, token) {
			state.token = token
      sessionStorage.setItem(Token)
		}
	},
	actions: {
		login({
			commit,
			rootState
		}){
      // 因为设置为带命名空间的模块,所以引用需要带着命名空间名
      // 自行选择是否配置 Promise
			if(!rootState.user.token){ 
				commit('setToken', '模拟Token')
			}
		}
	}
};
  • 在main.js内引入
import Vue from 'vue'
import App from './App'
import store from './store'

Vue.prototype.$store = store

new Vue({
  el: '#app',
  store,
  render: h => h(App)
})
  • store 使用
// Vue 页面内使用
this.$store.dispatch('user/login')

// router 内使用
import store from '@/store/index.js'
store.dispatch('user/login')
  • Vue 页面内引用 store 内的参数
<template>
	<div>
    	{{token}}
	</div>
</template>
<script>
import {
	mapState
} from 'vuex'
export default {
	computed: mapState('user', ['token'])
}
</script>
上次更新 2026/6/23 11:49:15
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.8